<?php
/**
 * @author Fernando
 */
    class Projeto_Produtos{
        private $codigo;
        private $codcategoria;
        private $descricao;
        private $quantidade;
        private $preco;
        private $promocao;
        private $imagem;
        private $upimagem;
        private $codpromocao;
        private $codproduto;
        private $precopromocao;
        private $descpromocao;
        private $nome;


        public function __construct(){
            $this->codigo = 0;
            $this->nome = '';
            $this->codcategoria = 0;
            $this->descricao = '';
            $this->quantidade = 0;
            $this->preco = 0;
            $this->promocao = '';
            $this->imagem = '';
            $this->upimagem = '';
            $this->codpromocao = 0;
            $this->codproduto = 0;
            $this->precopromocao = 0;
            $this->descpromocao = '';
        }
        
        public function setCodigo($value){
            $this->codigo = (int)$value;
        }
        
        public function getCodigo(){
            return $this->codigo;
        }
		
        public function setNome($value){
                $this->nome = $value;
        }

        public function getNome(){
                return $this->nome;
        }
        
        public function setCodcategoria($value){
            $this->codcategoria = (int)$value;
        }
        
        public function getCodcategoria(){
            return $this->codcategoria;
        }
        
        public function setDescricao($value){
            $this->descricao = Util_Util::LimpaStringCompleta($value);
        }
        
        public function getDescricao(){
            return $this->descricao;
        }
        
        public function setQuantidade($value){
            $this->quantidade = (int)$value;
        }
        
        public function getQuantidade(){
            return $this->quantidade;
        }
        
        public function setPreco($value){
            $this->preco = (float)$value;
        }
        
        public function getPreco(){
            return $this->preco;
        }
        
        public function setPromocao($value){
            $this->promocao = Util_Util::LimpaStringCompleta($value);
        }
        
        public function getPromocao(){
            return $this->promocao;
        }

        public function setImagem($value){
            $this->imagem = $value;
        }
        
        public function getImagem(){
            return $this->imagem;
        }
        
        public function setUpimagem($value){
            $this->upimagem = $value;
        }
        
        public function getUpimagem(){
            return $this->upimagem;
        }
        
        public function setCodPromocao($value){
            $this->codpromocao = (int)$value;
        }
        
        public function getCodPromocao(){
            return $this->codpromocao;
        }
        
        public function setCodProduto($value){
            $this->codproduto = (int)$value;
        }
        
        public function getCodProduto(){
            return $this->codproduto;
        }
        
        public function setPrecoPromocao($value){
            $this->precopromocao = (float)$value;
        }
        
        public function getPrecoPromocao(){
            return $this->precopromocao;
        }
        
        public function setDescPromocao($value){
            $this->descpromocao = Util_Util::LimpaStringCompleta($value);
        }
        
        public function getDescPromocao(){
            return $this->descpromocao;
        }
		
		public function retornaModelo($modelo){
			$query = ("SELECT codigo FROM modelo WHERE descricao LIKE '%$modelo%'");
			$db = new DB_Connect();
			$resultado = $db->Query($query);
			if(!$resultado->NumRows()){
				throw new Exception("Modelo não encontrado!");			
			}else{
				$dados = $resultado->FetchObject();
				return $dados->codigo;
			}
		}


        public function Lista($modelo = NULL){
			if(!$modelo){
				$stringSql = " promocao = 'S'";
			}else{
				$stringSql = " codcategoria = '$modelo'";
			}
            $list = ("
				SELECT 
					p.codigo as codproduto, 
					p.codcategoria, 
					p.nome AS nome,
					p.descricao as descproduto, 
					p.qtd, 
					p.preco as preco, 
					p.imagem AS imagem, 
					p.upimagem, 
					promo.codigo as codprodutopromocao, 
					promo.preco as precopromocao,
					promo.descricao as descpromo,
					p.promocao 
				FROM 
					produtos as p 
				LEFT JOIN 
					promocoes as promo ON p.codigo = promo.codproduto 
				WHERE 
					$stringSql
			");
            $db = new DB_Connect();
            $result = $db->Query($list);
            if(!$result->NumRows()){
				throw new Exception("Não foram encontrados produtos");
			}else{
				$dados = array();
				while($image = $result->FetchObject()){
					$dados[] = $image;
				}
				return $dados;
			}
        }
        
        public function Busca(){
            $stringSql = " nome LIKE '%{$this->getNome()}%'";
            $list = ("
                        SELECT 
                            p.codigo as codproduto, 
                            p.codcategoria, 
                            p.nome AS nome,
                            p.descricao as descproduto, 
                            p.qtd, 
                            p.preco as preco, 
                            p.imagem AS imagem, 
                            p.upimagem, 
                            promo.codigo as codprodutopromocao, 
                            promo.preco as precopromocao,
                            promo.descricao as descpromo,
                            p.promocao 
                        FROM 
                            produtos as p 
                        LEFT JOIN 
                            promocoes as promo ON p.codigo = promo.codproduto 
                        WHERE 
                            $stringSql
                    ");
            $db = new DB_Connect();
            $result = $db->Query($list);
            if(!$result->NumRows()){
				throw new Exception("Não foram encontrados produtos");
			}else{
				$dados = array();
				while($image = $result->FetchObject()){
					$dados[] = $image;
				}
				return $dados;
			}
        }
        
        public function ListaModelo(){
            
            $modelo = ("SELECT codigo, descricao FROM modelo");
            $db = new DB_Connect();
            $result = $db->Query($modelo);
            if(!$result->NumRows()){
                throw new Exception("Modelo não encontrado!");
            }else{
                $dados = array();
                while($listamodelo = $result->FetchObject()){
                    $dados[] = $listamodelo;
                }
                return $dados;
            }
        }


        public function Carrega(){
            $prod = ("
				SELECT 
					p.nome as nome, 
					p.codigo as codigoproduto, 
					p.codcategoria as codcategoria, 
					p.descricao as descricao, 
					p.qtd as quantidade, 
					p.preco as preco, 
					p.imagem as imagem, 
					p.upimagem as upimagem, 
                                        p.promocao as promocao,
					promo.codigo as codigopromo, 
					promo.codproduto as codproduto, 
					promo.preco as precopromocao, 
					promo.descricao as descpromocao 
				FROM 
					produtos as p 
				LEFT JOIN 
					promocoes as promo ON p.codigo = promo.codproduto 
				WHERE p.codigo = '{$this->getCodigo()}'
			");
            $db = new DB_Connect();
            $result = $db->Query($prod);
            
            if(!$result->NumRows()){
                throw new Exception("Produto não encontrado!");
            }else{
                $dados = $result->FetchObject();
                $this->setCodigo($dados->codigoproduto);
                $this->setCodcategoria($dados->codcategoria);
                $this->setDescricao($dados->descricao);
                $this->setQuantidade($dados->quantidade);
                $this->setPreco($dados->preco);
                $this->setImagem($dados->imagem);
                $this->setUpimagem($dados->upimagem);
                $this->setPromocao($dados->promocao);
                $this->setCodPromocao($dados->codigopromo);
                $this->setCodProduto($dados->codproduto);
                $this->setPrecoPromocao($dados->precopromocao);
                $this->setDescPromocao($dados->descpromocao);
		$this->setNome($dados->nome);
            }
        }
        
        public function Cadastra(){
            
            $db = new DB_Connect();
            if($this->promocao == "S"){
                $produto = ("
                    INSERT INTO produtos
                        (codcategoria, descricao, qtd, preco, promocao, imagem, upimagem, nome)
                    VALUES
                        ('{$this->codcategoria}', '{$this->descricao}', '{$this->quantidade}', '{$this->preco}', '{$this->promocao}', '{$this->imagem}', '{$this->upimagem}', '{$this->nome}')");
                if(!$db->Query($produto)){
                    throw new Exception("Não foi possível realizar o cadastro!");
                }
                $lastid = mysql_insert_id();
            
                $promocao = ("
                    INSERT INTO promocoes
                        (codproduto, preco, descricao)
                    VALUES
                        ('$lastid', '{$this->precopromocao}', '{$this->descpromocao}')");
                if(!$db->Query($promocao)){
                    throw new Exception("Não foi possível realizar o cadastro!");
                }
            }else{
                $produto = ("
                    INSERT INTO produtos
                        (codcategoria, descricao, qtd, preco, promocao, imagem, upimagem, nome)
                    VALUES
                        ('{$this->codcategoria}', '{$this->descricao}', '{$this->quantidade}', '{$this->preco}', '{$this->promocao}', '{$this->imagem}', '{$this->upimagem}', '{$this->nome}')");
                if(!$db->Query($produto)){
                    throw new Exception("Não foi possível realizar o cadastro!");
                }
            }
        }
        
        public function Exclui(){
            
            $db = new DB_Connect();
            $query = ("DELETE FROM produtos WHERE codigo = '{$this->getCodigo()}'");
            if(!$db->Query($query)){
                throw new Exception("O produto não pode ser excluido!");
            }else{
                throw new Exception("Produto excluido!");
            }
        }
        
        public function Edita(){
            $db = new DB_Connect();
            $query = ("UPDATE produtos
                      SET 
                        codcategoria = '{$this->getCodcategoria()}',
                        descricao = '{$this->getDescricao()}',
                        qtd = '{$this->getQuantidade()}',
                        preco = '{$this->getPreco()}',
                        promocao = '{$this->getPromocao()}',
                        imagem = '{$this->getImagem()}',
                        upimagem = '{$this->getUpimagem()}',
                        nome = '{$this->getNome()}'
                     WHERE codigo = '{$this->getCodigo()}'
                    ");
            if(!$db->Query($query)){
                throw new Exception("Não foi possível alterar os dados do produto!");
            }
            if($this->Consulta()){
                $promocao = ("
                    INSERT INTO promocoes
                        (codproduto, preco, descricao)
                    VALUES
                        ('{$this->getCodigo()}', '{$this->precopromocao}', '{$this->descpromocao}')");
                if(!$db->Query($promocao)){
                    throw new Exception("Não foi possível realizar o cadastro!");
                }
            }else{
                $query2 = ("UPDATE promocoes
                        SET
                            preco = '{$this->getPrecoPromocao()}',
                            descricao = '{$this->getDescPromocao()}'
                        WHERE codproduto = '{$this->getCodigo()}'");
                if(!$db->Query($query2)){
                    throw new Exception("Não foi possível alterar os dados do produto!");
                }
            }
        }
        
        public function Consulta(){
            $db= new DB_Connect();
            $cons = ("SELECT * FROM promocoes WHERE codproduto = '{$this->getCodigo()}'");
            $result = $db->Query($cons);		
            if(!$result->NumRows()){
                    return true;
            }else{
                    return false;
            }
        }
    }
?>
